package com.cskaoyan._06operate._01travser;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/1 15:47
 **/
/*
数组的遍历
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        // 快捷键 数组名.fori
        // 基本的遍历
        traverse1(arr);
        System.out.println();
        System.out.println("----------");
        traverse2(arr);

        System.out.println();
        System.out.println("----------");
        traverse3(arr);


        System.out.println();
        System.out.println("----------");
        traverse4(arr);

        System.out.println();
        System.out.println("----------");
        traverse5(arr);

        System.out.println();
        System.out.println("----------");
        traverse6(arr);

        System.out.println();
        System.out.println("----------");
        int[] arr2 = null;
        traverse7(arr);


        System.out.println();
        System.out.println("----------");
        int[] arr3 = {};
        traverse9(arr);
    }

    public static void traverse1(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            // 输出元素值
            System.out.println(arr[i]);
        }
    }

    // 输出的结果更好看一些[1,2,3,4,5]
    public static void traverse2(int[] arr) {
        // 输出[
        System.out.print("[");

        for (int i = 0; i < arr.length; i++) {
            // 输出元素
            System.out.print(arr[i]);
            // 输出,
            System.out.print(",");
        }
        //输出]
        System.out.print("]");

    }

    // travser2中多了一个,号  我们再次优化
    public static void traverse3(int[] arr) {
        System.out.print("[");
        // 遍历数组
        for (int i = 0; i < arr.length; i++) {
            // 输出数组元素
            System.out.print(arr[i]);
            // 最后一个元素的时候不输出,
            if (i != arr.length - 1) {
                System.out.print(",");
            }
        }

        System.out.print("]");
    }

    // 也可以使用==进行判断
    public static void traverse4(int[] arr) {
        System.out.print("[");
        // 遍历数组
        for (int i = 0; i < arr.length; i++) {
            // 输出数组元素
            System.out.print(arr[i]);
            // 最后一个元素的时候不输出,
            if (i == arr.length - 1) {
                break;
            }
            System.out.print(",");
        }

        System.out.print("]");
    }

    // 再次改进 , 先输出前n-1个元素
    // 再输出最后一个
    public static void traverse5(int[] arr) {
        System.out.print("[");
        // 遍历数组
        for (int i = 0; i < arr.length - 1; i++) {
            // 输出数组元素
            System.out.print(arr[i]);

            System.out.print(",");
        }
        // 循环结束,再去输出最后一个元素
        System.out.print(arr[arr.length - 1]);
        System.out.print("]");
    }

    // 再修改, 可以转义字符\b, 退格
    public static void traverse6(int[] arr) {
        // 输出[
        System.out.print("[");

        for (int i = 0; i < arr.length; i++) {
            // 输出元素
            System.out.print(arr[i]);
            // 输出,
            System.out.print(",");
        }
        //输出]
        System.out.print("\b]");

    }


    // 方法能够接收特殊数组（null数组/长度为0的数组）的输入而能够正常输出
    // 能够接收长度为0的数组
    public static void traverse7(int[] arr) {
        // 先判断null
        if (arr == null) {
            System.out.println("数组为null");
            return;
        }

        // 判读数组长度
        if (arr.length == 0) {
            System.out.println("数组长度为0,不合法");
            return;
        }

        // 输出[
        System.out.print("[");

        for (int i = 0; i < arr.length; i++) {
            // 输出元素
            System.out.print(arr[i]);
            // 输出,
            System.out.print(",");
        }
        //输出]
        System.out.print("\b]");

    }

    // 要求能够接收为null的数组
    public static void traverse8(int[] arr) {
        // 判读数组长度
        if (arr.length == 0) {
            System.out.println("数组长度为0,不合法");
            return;
        }

        // 输出[
        System.out.print("[");

        for (int i = 0; i < arr.length; i++) {
            // 输出元素
            System.out.print(arr[i]);
            // 输出,
            System.out.print(",");
        }
        //输出]
        System.out.print("\b]");

    }


    // null数组和长度为0的数组一起判断
    public static void traverse9(int[] arr) {
        // 判读数组长度
        if (arr == null || arr.length == 0) {
            System.out.println("数组不合法");
            return;
        }

        // 输出[
        System.out.print("[");

        for (int i = 0; i < arr.length; i++) {
            // 输出元素
            System.out.print(arr[i]);
            // 输出,
            System.out.print(",");
        }
        //输出]
        System.out.print("\b]");

    }
}
